package hot100;


/*
 * Author：江松
 * Date：2023/4/15 10:27
 *
 两数相加：
 1，模拟计算，头插法插入，然后返回头节点
 一种方式是有空后直接把原链表接到后面加上进位
 一种方式是不断用while判断，减少逻辑判断，但增加了代码量
 */

public class Main2 {
     public class ListNode {
     int val;
     ListNode next;
     ListNode() {}
     ListNode(int val) { this.val = val; }
     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 }

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode t1=l1,t2=l2;
        ListNode head=new ListNode();
        ListNode pre=head;
        int carry=0;
        while(t1!=null&&t2!=null){
            ListNode cur=new ListNode((t1.val+t2.val+carry)%10);
            carry=(t1.val+t2.val+carry)>9?1:0;
            cur.next=null;
            pre.next=cur;
            pre=cur;
            t1= t1.next;
            t2=t2.next;
        }
        while(t1!=null){
            ListNode cur=new ListNode((t1.val+carry)%10);
            carry=(t1.val+carry)>9?1:0;
            cur.next=null;
            pre.next=cur;
            pre=cur;
            t1= t1.next;
        }
        while(t2!=null){
            ListNode cur=new ListNode((t2.val+carry)%10);
            carry=(t2.val+carry)>9?1:0;
            cur.next=null;
            pre.next=cur;
            pre=cur;
            t2=t2.next;
        }
        //也得加上最后一次的进位
        if(carry!=0)pre.next=new ListNode(carry);
        return head.next;
    }
 /*
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode t1=l1,t2=l2;
        ListNode head=new ListNode();
        ListNode pre=head;
        int carry=0;
        while(t1!=null&&t2!=null){
            ListNode cur=new ListNode((t1.val+t2.val+carry)%10);
            carry=(t1.val+t2.val+carry)>9?1:0;
            cur.next=null;
            pre.next=cur;
            pre=cur;
            t1= t1.next;
            t2=t2.next;
        }
        pre.next=t1!=null?t1:t2;
        //判断进位，要用while，因为后面可能是99999
        while(carry!=0){
            if(pre.next!=null){
                int val=pre.next.val+carry;
                pre.next.val=val%10;
                carry=val>9?1:0;
            }else{
                pre.next=new ListNode(carry);
            }
        }
        return head.next;
    }
    */
}
